var HORIZONTAL = "horizontal";
var VERTICAL_DER = "vertical_der";
var VERTICAL_IZQ = "vertical_izq";

var MOVER_OK = -1;
var MOVER_NOK = -2;

function Punto(x,y) {
	this.x = x;
	this.y = y;
}

function Segmento(x1,y1,x2,y2) {
	this.x1 = x1;
	this.y1 = y1;
	this.x2 = x2;
	this.y2 = y2;
	if (this.y1 == this.y2)
		this.tipo = HORIZONTAL;
	else {
		// x1 == x2
		if (this.y1 > this.y2)
			this.tipo = VERTICAL_DER;
		else
			this.tipo = VERTICAL_IZQ;
	}
	
	this.contiene = function(x,y) {
		switch (this.tipo) {
			case HORIZONTAL:
					return (y == this.y1 && x >= this.x1 && x <= this.x2);
				break;
			case VERTICAL_DER:
					return (x == this.x1 && y >= this.y2 && y <= this.y1);
				break;
			case VERTICAL_IZQ:
					return (x == this.x1 && y >= this.y1 && y <= this.y2);
				break;
		}
	} 
	
	this.moverA = function(x, y) {
		var res = MOVER_NOK;
		if (this.contiene(x, y)) return MOVER_OK;
		switch (this.tipo) {
			case HORIZONTAL:
					if (y == this.y1) {
						if (x < x1)
							res = x1;
						else
							res = x2;
					} 
				break;
			case VERTICAL_DER:
					if (x == this.x1) {
						if (y > y1)
							res = y1;
						else 
							res = y2;
					}
				break;
			case VERTICAL_IZQ:
					if (x == x1) {
						if (y < y1)
							res = y1;
						else 
							res = y2;
					}
				break;
		}
		return res;
	}
}

function crearSegmentos(puntos) {
	var segmentos = new Array();
	var indice = 0;
	for (var i=0; i<puntos.length-2; i=i+2) {
		segmentos[indice] = new Segmento(puntos[i], puntos[i+1], puntos[i+2], puntos[i+3]);
		indice++;
	}
	console.log("num segmentos: " + indice);
	return segmentos;
}

function Pantalla(puntos) {
	this.puntos = puntos;
	this.segmentos = crearSegmentos(puntos);
	
	this.moverA = function(x1, y1, x2, y2) {
		for (var i=0; i<this.segmentos.length;i++) {
			if (this.segmentos[i].contiene(x2, y2))
				return this.segmentos[i].moverA(x2, y2);
		}
		for (var i=0; i<this.segmentos.length; i++) {
			if (this.segmentos[i].contiene(x1, y1))
				return this.segmentos[i].moverA(x2, y2);
		}
		return MOVER_NOK;
	}
	
	this.getPosicionInicial = function() {
		return new Punto(this.puntos[0], this.puntos[1]);
	}
	
	this.getPosicionFinal = function() {
		return new Punto(this.puntos[this.puntos.length-2], this.puntos[this.puntos.length-1]);
	}
	
	this.getTipoSegmento = function(x, y) {
		for (var i=0; i<this.segmentos.length; i++) {
			if (this.segmentos[i].contiene(x, y))
				return this.segmentos[i].tipo;
		}
		return null;
	}
}

function getPantalla(numero, sprite) {
	switch (numero) {
		case 0: 
				// return new Pantalla([0,255,180,255,180,54,546,54,546,255,736,255]); // escaleras.png
			return new Pantalla([2,314,58,314,58,185,238,185,238,77,416,77,416,1,624,1,624,144,752,144]);
			break;
	}
	return null;
}
